前の手順では、リソースファイルを追加し、アプリケーションへのコードの追加を開始しました。この手順では、残りのアプリケーションコードを追加します。
C# コードの書き方
C# |
コードのコピー
|
---|---|
#region event handlers void Printing_Unloaded(object sender, RoutedEventArgs e) { UnregisterForPrinting(); } void Printing_Loaded(object sender, RoutedEventArgs e) { // 印刷を初期化します RegisterForPrinting(); } private async void btnPrint_Click(object sender, RoutedEventArgs e) { await Windows.Graphics.Printing.PrintManager.ShowPrintUIAsync(); } #endregion |
C# |
コードのコピー
|
---|---|
#region implemention #endregion |
C# コードの書き方
C# |
コードのコピー
|
---|---|
/// <summary> /// これは、PrintManager.PrintTaskRequested のイベントハンドラです。 /// </summary> /// <param name="sender">PrintManager</param> /// <param name="e">PrintTaskRequestedEventArgs </param> protected void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs e) { PrintTask printTask = null; printTask = e.Request.CreatePrintTask("SamplePDF", sourceRequested => { // 印刷ジョブが完了すると、印刷タスクのイベントハンドラが呼び出されます。 printTask.Completed += async (s, args) => { // 印刷操作が失敗したらユーザーに通知します。 if (args.Completion == PrintTaskCompletion.Failed) { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { MessageDialog dialog = new MessageDialog("Failed to print."); dialog.ShowAsync(); }); } }; |
C# コードの書き方
C# |
コードのコピー
|
---|---|
// 用紙サイズや用紙方向などの印刷オプションを設定します Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { var layout = rtb.ViewManager.PresenterInfo as C1PageLayout; if (layout != null && layout.Width > layout.Height) { printTask.Options.Orientation = PrintOrientation.Landscape; } }); sourceRequested.SetSource(printDocumentSource); }); } |
C# コードの書き方
C# |
コードのコピー
|
---|---|
/// <summary> /// このメソッドは、印刷用アプリケーションを Windows に登録し、印刷プロセスに必要なイベントハンドラを設定します。 /// </summary> protected void RegisterForPrinting() { // PrintDocument を作成します。 printDocument = new PrintDocument(); // DocumentSource を保存します。 printDocumentSource = printDocument.DocumentSource; // 印刷プレビューを設定するイベントハンドラを追加します。 printDocument.Paginate += Paginate; // 指定されたプレビューページを提供するイベントハンドラを追加します。 printDocument.GetPreviewPage += GetPrintPreviewPage; // すべての最終印刷ページを提供するイベントハンドラを追加します。 printDocument.AddPages += AddPrintPages; // PrintManager を作成し、印刷初期化のハンドラを追加します。 PrintManager printMan = PrintManager.GetForCurrentView(); printMan.PrintTaskRequested += PrintTaskRequested; } |
C# コードの書き方
C# |
コードのコピー
|
---|---|
/// <summary> /// このメソッドは、印刷用アプリケーションの Windows への登録を解除します。 /// </summary> protected void UnregisterForPrinting() { if (printDocument == null) return; printDocument.Paginate -= Paginate; printDocument.GetPreviewPage -= GetPrintPreviewPage; printDocument.AddPages -= AddPrintPages; // 印刷初期化のハンドラを削除します。 PrintManager printMan = PrintManager.GetForCurrentView(); printMan.PrintTaskRequested -= PrintTaskRequested; } |
C# コードの書き方
C# |
コードのコピー
|
---|---|
/// <summary> /// これは、PrintDocument.Paginate のイベントハンドラです。 /// PrintManager が印刷プレビューを要求すると起動します /// </summary> /// <param name="sender">PrintDocument</param> /// <param name="e">Paginate Event Arguments</param> protected void Paginate(object sender, PaginateEventArgs e) { pages.Clear(); viewManager = new C1RichTextViewManager { Document = rtb.Document, PresenterInfo = rtb.ViewManager.PresenterInfo }; PrintDocument printDoc = (PrintDocument)sender; // プレビューページ数を報告します printDoc.SetPreviewPageCount(rtb.ViewManager.Presenters.Count, PreviewPageCountType.Intermediate); } /// <summary> /// これは、PrintDocument.GetPrintPreviewPage のイベントハンドラです。特定の印刷プレビューページを /// UIElement の形式で PrintDocument のインスタンスに提供します。次に PrintDocument は、この UIElement を /// Windows 印刷システムが処理できるページに変換します。 /// </summary> /// <param name="sender">PrintDocument</param> /// <param name="e">プレビュー要求されたページを含む引数</param> protected void GetPrintPreviewPage(object sender, GetPreviewPageEventArgs e) { // 最初のページを追加します if (e.PageNumber == 1) AddOnePrintPreviewPage(0); PrintDocument printDoc = (PrintDocument)sender; printDoc.SetPreviewPage(e.PageNumber, pages[e.PageNumber - 1]); // 他のページを追加します if (e.PageNumber == 1) for (int i = 1; i < viewManager.Presenters.Count; i++) AddOnePrintPreviewPage(i); } /// <summary> /// これは、PrintDocument.AddPages のイベントハンドラです。印刷するすべてのページを /// UIElement の形式で PrintDocument のインスタンスに提供します。次に PrintDocument は、これらの UIElement を /// Windows 印刷システムが処理できるページに変換します。 /// </summary> /// <param name="sender">PrintDocument</param> /// <param name="e">印刷タスクのオプション参照を含むページ追加イベントの引数</param> protected void AddPrintPages(object sender, AddPagesEventArgs e) { // すべてのページをループし、印刷する各ページを追加します foreach (FrameworkElement page in pages) { printDocument.AddPage(page); } PrintDocument printDoc = (PrintDocument)sender; // すべての印刷ページが準備できたことを示します printDoc.AddPagesComplete(); } void AddOnePrintPreviewPage(int index) { var page = (FrameworkElement)printTemplate.LoadContent(); page.DataContext = viewManager.Presenters[index]; if (!pages.Contains(page)) pages.Add(page); } |
この手順では、アプリケーションコードを追加しました。次の手順では、このアプリケーションを実行します。